#ifndef CHAT_H
#define CHAT_H

#include <QDialog>

#include<QUdpSocket>
#include"tcpserver.h"
#include"tcpclient.h"
#include<QString>
namespace Ui {
class Chat;
}


enum messageType{
    Message,
    NewParticipant,
    LeftParticipant,
    Refuse,
    FileName,
    Xchat


};


class Chat : public QDialog
{
    Q_OBJECT

public:
   // explicit Chat(QWidget *parent = 0);
    ~Chat() override;
    Chat(QString pasvusername,QString pasvuserip);

    QString xpasuserip;
    QString xpasusername;

    QUdpSocket *xchat;
    qint32 xport;

    void sendMessage(messageType type,const QString& serverAddress = "");
    quint16 a;

    bool is_opend;

    static int num1;                                // 用于判断是否是第一次打开聊天窗口
    static int num2;                                // 用于判断是否是第一次打开聊天窗口

protected:
    void hasPendinFile(const QString& userName,const QString& serverAddress,
                       const QString& clientAddress,const QString& filename);
    void userLeft(const QString& userName,const QString& localHostName,const QString& time);
    void saveFile(const QString& fileName);

    bool eventFilter(QObject *target, QEvent *event) override;

    void closeEvent(QCloseEvent *) override;

    //void userNameAndTime(QString name,QString time);
private slots:

    void processPendinDatagrams();
    void getFileName(QString);

    void on_boldToolButton_clicked(bool checked);

    void on_italicToolButton_clicked(bool checked);

    void on_underToolButton_clicked(bool checked);

    void on_colorToolButton_clicked();

    void on_sendToolButton_clicked();

    void on_saveToolButton_clicked();

    void on_clearToolButton_clicked();

    void on_closePushButton_clicked();

    void on_sendPushButton_clicked();

    void on_fontComboBox_currentFontChanged(const QFont &f);

    void on_comboBox_currentIndexChanged(const QString &arg1);

private:
    Ui::Chat *ui;                                   // 聊天界面
    TcpServer *server;                              // 服务器
    QColor color;                                   // 字体颜色
    // bool savaFile(QString fileName);

    [[nodiscard]] QString getMessage() const;
    static QString getIp();                         // 获取本机IP
    static QString getUserName();                   // 获取本机用户名


    bool used;                                      // 是否使用UDP

    QString message;                                // 聊天信息
    QString fileName;                               // 文件名
};

#endif // CHAT_H
